Page({
  /**
   * 页面的初始数据
   */
  data: {
    title: '',         // 菜谱标题
    videoDescription: '',   // 菜谱描述
    showSuccess: false, // 是否显示发布成功提示
    coverUrl: '',
    categoryId: null,
    fileType: '',      // 文件类型：'image' 或 'video'
  },

  /**
   * 处理标题输入
   */
  handleTitleInput(e) {
    this.setData({
      title: e.detail.value
    });
  },

  /**
   * 处理描述输入
   */
  handleDescInput(e) {
    this.setData({
      videoDescription: e.detail.value
    });
  },

  /**
   * 跳转到分类选择页面
   */
  navigateToCategory() {
    wx.navigateTo({
      url: '/transmit/pages/transmitselect/transmitselect',
      success: () => {
        console.log('跳转到分类选择页面成功');
      },
      fail: (err) => {
        console.error('跳转失败:', err);
        wx.showToast({
          title: '跳转失败',
          icon: 'none',
          duration: 2000
        });
      }
    });
  },

  /**
   * 上传菜谱主图或视频
   */
  uploadCoverImage() {
    wx.showActionSheet({
      itemList: ["拍照", "从相册选择", "选择视频"],
      itemColor: "#333",
      success: (res) => {
        if (res.tapIndex === 0) {
          // 拍照
          this._chooseImage("camera");
        } else if (res.tapIndex === 1) {
          // 从相册选择
          this._chooseImage("album");
        } else if (res.tapIndex === 2) {
          // 选择视频
          this._chooseVideo();
        }
      },
      fail: (err) => {
        console.log("选择菜单失败:", err);
      }
    });
  },

  /**
   * 选择图片
   */
  _chooseImage(sourceType) {
    wx.chooseImage({
      count: 1,
      sizeType: ["original", "compressed"],
      sourceType: [sourceType],
      success: (res) => {
        const tempFilePath = res.tempFilePaths[0];
        console.log("选择的图片路径:", tempFilePath);
        
        // 显示上传中提示
        wx.showLoading({ title: '正在上传...' });
        
        // 调用文件上传接口
        this.uploadFile(tempFilePath, 'image');
      },
      fail: (err) => {
        console.log(`选择图片失败：`, err);
        wx.showToast({
          title: '选择图片失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 选择视频
   */
  _chooseVideo() {
    wx.chooseVideo({
      sourceType: ['album'],
      maxDuration: 60, // 最大时长60秒
      camera: 'back',
      success: (res) => {
        const tempFilePath = res.tempFilePath;
        console.log("选择的视频路径:", tempFilePath);
        console.log("视频时长:", res.duration, "秒");
        console.log("视频大小:", res.size, "字节");
        
        // 显示上传中提示
        wx.showLoading({ title: '正在上传...' });
        
        // 调用文件上传接口
        this.uploadFile(tempFilePath, 'video');
      },
      fail: (err) => {
        console.log(`选择视频失败：`, err);
        wx.showToast({
          title: '选择视频失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 上传文件到服务器
   */
  uploadFile(filePath, fileType = 'image') {
    // 引入网络请求工具
    const { request } = require('../../../utils/request.js');
    
    // 构建上传请求配置
    const uploadConfig = {
      url: 'http://localhost:8080/common/upload', // ruoyi文件上传接口
      filePath: filePath,
      name: 'file',
      formData: {
        // 可以添加其他表单数据
      },
      success: (res) => {
        console.log('上传成功:', res);
        wx.hideLoading();
        
        if (res.statusCode === 200) {
          try {
            const data = JSON.parse(res.data);
            console.log('解析后的响应数据:', data);
            
            if (data.code === 200) {
              // 获取图片URL，优先使用 url 字段，其次使用 data 字段
              const imageUrl = data.url || data.data || data.fileName;
              console.log('设置的图片URL:', imageUrl);
              
              // 上传成功，设置文件路径和类型
              this.setData({
                coverUrl: imageUrl,
                fileType: fileType
              }, () => {
                // 在回调中确认数据已设置
                console.log('coverUrl 已设置为:', this.data.coverUrl);
                console.log('文件类型已设置为:', this.data.fileType);
                
                wx.showToast({
                  title: '上传成功',
                  icon: 'success'
                });
              });
            } else {
              console.error('服务器返回错误:', data);
              wx.showToast({
                title: data.msg || '上传失败',
                icon: 'none'
              });
            }
          } catch (parseError) {
            console.error('解析响应数据失败:', parseError);
            wx.showToast({
              title: '响应数据格式错误',
              icon: 'none'
            });
          }
        } else {
          console.error('HTTP状态码错误:', res.statusCode);
          wx.showToast({
            title: '上传失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('上传失败:', err);
        wx.hideLoading();
        wx.showToast({
          title: '上传失败',
          icon: 'none'
        });
      }
    };
    
    // 执行上传
    wx.uploadFile(uploadConfig);
  },

  /**
   * 图片加载成功回调
   */
  onImageLoad(e) {
    console.log('图片加载成功:', e);
    console.log('当前 coverUrl:', this.data.coverUrl);
  },

  /**
   * 图片加载失败回调
   */
  onImageError(e) {
    console.error('图片加载失败:', e);
    console.error('失败的图片URL:', this.data.coverUrl);
    
    wx.showToast({
      title: '图片加载失败',
      icon: 'none'
    });
  },

  /**
   * 删除封面图片或视频
   */
  deleteCoverImage() {
    const fileTypeText = this.data.fileType === 'video' ? '视频' : '图片';
    wx.showModal({
      title: '提示',
      content: `确定要删除这个${fileTypeText}吗？`,
      success: (res) => {
        if (res.confirm) {
          this.setData({
            coverUrl: '',
            fileType: ''
          });
          wx.showToast({
            title: '已删除',
            icon: 'success'
          });
        }
      }
    });
  },

  /**
   * 发布菜谱
   */
  publishRecipe() {
    const { title, videoDescription } = this.data;
    
    // 表单验证
    if (!title.trim()) {
      wx.showToast({ title: "请填写标题", icon: "none" });
      return;
    }
    
    if (!videoDescription.trim()) {
      wx.showToast({ title: "请填写描述", icon: "none" });
      return;
    }

    // 显示加载提示
    wx.showLoading({ title: '正在发布...' });

    // 引入网络请求工具
    const { post } = require('../../../utils/request.js');
    
    // 准备发送的数据（使用 this.data 中的所有数据）
    const videoData = {
      ...this.data,
      title: title.trim(),
      videoDescription: videoDescription.trim()
    };

    console.log("准备发送的视频数据:", videoData);
    
    // 发送POST请求到服务器
    post('/collect/recipes', videoData)
      .then(res => {
        console.log("发布成功，服务器响应:", res);
        
        wx.hideLoading();
        
        // 显示发布成功提示
        this.setData({
          showSuccess: true
        });

        // 发布成功后重置表单
        setTimeout(() => {
          this.setData({
            title: "",
            videoDescription: "",
            coverUrl: "",
            fileType: "",
            categoryId: null,
            showSuccess: false
          });
        }, 2000);
      })
      .catch(err => {
        console.error('发布失败:', err);
        
        wx.hideLoading();
        wx.showToast({ 
          title: "发布失败，请重试", 
          icon: "none",
          duration: 2000
        });
      });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 获取页面栈，检查是否有分类选择返回的数据
    const pages = getCurrentPages();
    const currentPage = pages[pages.length - 1];
    
    // 检查是否有分类选择返回的数据
    if (currentPage.options && currentPage.options.categoryId) {
      const categoryId = currentPage.options.categoryId;
      console.log('接收到分类选择返回的数据:', categoryId);
      
      // 设置分类ID
      this.setData({
        categoryId: categoryId
      });
      
      // 显示选择成功提示
      wx.showToast({
        title: '分类选择成功',
        icon: 'success',
        duration: 1500
      });
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
});
